@file:Suppress("unused")

package com.example.base.ui.dialog

import android.content.DialogInterface
import androidx.annotation.StyleRes
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.FragmentManager
import com.example.base.R
import com.example.base.ext.OnInitDialog

/**  拥有两个按钮的 Dialog  **/
class ConfirmDialog<VDB : ViewDataBinding> private constructor(private val builder: Builder<VDB>) :
    UIDialog<VDB>() {

    /**  get the selectDialog custom layout  **/
    override fun getContentRes(): Int = R.layout.layout_alert_dialog

    override fun initData() {
        builder.onInitDialog?.complete(mBinding, this)
    }

    override fun onBackPressed() {
        builder.onCancel(requireDialog())
    }

    override val isSupportCancel: Boolean = builder.isSupportCancel

    /**  ConfirmDialog 的构建者  **/
    internal class Builder<VDB : ViewDataBinding> {
        /**  标题  **/
        var title = ""
        /**  正文内容  **/
        var message = ""
        /**  确认按钮文字  **/
        var confirmText = "确认"
        /**  取消按钮文字  **/
        var cancelText = "取消"
        /**  Dialog 是否支持点击外侧取消, 默认不支持  **/
        var isSupportCancel = false
        /**  Dialog 的显示/消失 动画, 默认为 [R.style.DialogTheme_AnimStyle]  **/
        @StyleRes
        var windowAnimations = R.style.DialogTheme_AnimStyle
        /**  Dialog 初始化时会被调用  **/
        var onInitDialog: OnInitDialog<VDB>? = null
        /**  当点击确认按钮时的事件, 默认是关闭当前 selectDialog  **/
        var onConfirm: (dialog: DialogInterface) -> Unit = { dialog -> dialog.dismiss() }
        /**  当点击取消按钮时的事件, 默认是关闭当前 selectDialog  **/
        var onCancel: (dialog: DialogInterface) -> Unit = { dialog -> dialog.dismiss() }

        /**  构建 Dialog 并显示  **/
        fun build(manager: FragmentManager) {
            ConfirmDialog(this).show(manager)
        }
    }

}


